package com.qianfeng.jdbc3;


//
//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖镇楼            BUG辟易  
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  


import com.qianfeng.pojo.User;
import com.qianfeng.utils.DBUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * Created by jackiechan on 2021/8/22 14:29
 *
 * @author jackiechan
 * @version 1.0
 * @since 1.0
 */

public class UserDaoImpl {

    //根据用户名和密码查询用户,要解决注入问题

    public User getUserByUserNameAndPassword(String userName, String password) throws Exception {
        Connection connection = DBUtils.getConnection();
        //创建预编译的 statement,所有需要传递参数的位置都写?
        PreparedStatement statement = connection.prepareStatement("select * from user where username =? and password =?");
        //设置真正的参数
        statement.setString(1, userName);// 第一个? 会被替换为我们的 username
        statement.setString(2, password);//第二个问号会替换为第二个参数
        ResultSet resultSet = statement.executeQuery();//现在查询的时候就不需要设置 sql 了,因为在创建的时候已经设置过了
        User user = null;
        while (resultSet.next()) {
            System.err.println("查询到了数据");
            user = new User();
            //System.err.println(resultSet.getInt(1));
            user.setUid(resultSet.getLong("uid"));
            user.setUsername(resultSet.getString("username"));
            user.setPassword(resultSet.getString("password"));
            user.setName(resultSet.getString("name"));
            user.setEmail(resultSet.getString("email"));
            user.setPhone(resultSet.getString("phone"));
            user.setAddr(resultSet.getString("addr"));
            user.setState(resultSet.getString("state"));
            user.setCode(resultSet.getString("code"));
        }
        DBUtils.closeResources(connection,statement,resultSet);
        return user;
    }


    public int addUser(User user) throws Exception {
        Connection connection = DBUtils.getConnection();
        PreparedStatement statement = connection.prepareStatement("insert into user (username,password,`name`,email,phone,addr,`state`,code) values (?,?,?,?,?,?,?,?)");
        statement.setString(1, user.getUsername());
        statement.setString(2, user.getPassword());
        statement.setString(3, user.getName());
        statement.setString(4, user.getEmail());
        statement.setString(5, user.getPhone());
        statement.setString(6, user.getAddr());
        statement.setString(7, user.getState());
        statement.setString(8, user.getCode());
        int result = statement.executeUpdate();
        DBUtils.closeResources(connection, statement, null);
        return result;
    }


    public User getUserInfoByUserName(String userName) throws Exception {
        Connection connection = DBUtils.getConnection();
        PreparedStatement statement = connection.prepareStatement("select * from user where username =?");
        statement.setString(1,userName);//设置参数
        ResultSet resultSet = statement.executeQuery();
        User user = null;
        if (resultSet.next()) {//因为我们的用户名是有唯一性要求的,所以如果根据用户名查询,最多能查询到一条数据
            user = new User();
            user.setUid(resultSet.getLong("uid"));
            user.setUsername(resultSet.getString("username"));
            user.setPassword(resultSet.getString("password"));
            user.setName(resultSet.getString("name"));
            user.setEmail(resultSet.getString("email"));
            user.setPhone(resultSet.getString("phone"));
            user.setAddr(resultSet.getString("addr"));
            user.setState(resultSet.getString("state"));
            user.setCode(resultSet.getString("code"));
        }

        return user;
    }



    //TODO 更多的操作需要参考 jdbc2里面StudentDaoImpl中的其他操作,自己替换
}
